package com.fang.six.srv.gc;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;

public class ReferenceTest {

    public static void main(String[] args) {
        String s = new String("讲义");

        // 创建一个弱引用对象
        WeakReference weakReference = new WeakReference(s);
        // 切断引用
        s = null;
        // 取出弱引用所引用的对象
        System.out.println(weakReference.get());

        // 强制垃圾回收
        System.gc();
        System.runFinalization();
        // 再次取出弱引用所引用的对象
        System.out.println(weakReference.get());

        s = "讲义2";
        // 创建引用队列
        ReferenceQueue rq = new ReferenceQueue();
        // 创建一个虚引用
        PhantomReference pr = new PhantomReference(s, rq);
        // 切断引用
        s = null;
        // 获取虚引用
        System.out.println(pr.get());

        System.gc();
        System.runFinalization();

        // 取出引用队列中最先进入队列的引用于pr进行比较
        System.out.println(rq.poll() == pr);




    }

}
